#include <stdio.h>
#include <sys/epoll.h>
#include "rbt_timer.h"


void print_hello(struct timer_node_s * tn) {
    printf("timer handled time = %u\n", tn->node.key);
}

int main()
{
    init_timer();

    add_timer(1000, print_hello);
    add_timer(2000, print_hello);
    timer_node_t *tn = add_timer(3000, print_hello);
    add_timer(5000, print_hello);
    add_timer(10000, print_hello);
    del_timer(tn);
    
    int epfd = epoll_create(1);
    struct epoll_event evs[512] = {0};

    for (;;) {
        int nearest = find_nearest_timer(); // 最近要触发的定时器，减去当前时间
        //int n = epoll_wait(epfd, evs, 512, -1); // -1 一直阻塞，0 立刻返回， ms 最长等待网络事件的时间
        int n = epoll_wait(epfd, evs, 512, nearest); // 阻塞等待nearest时间，还没有网络事件，就去处理定时器任务，如果不设置会一直处理hander_timer()，做一些无效的检测
        int i = 0;
        for (; i < n; ++i) {
            // 网络事件的处理
        }
        handle_timer();
    }
    return 0;
}